我們再從流程來看一次 Activity 的生命週期階段。
上面的條列,從 Initialized 起始,結束於 Destroyed。
通則來說,這些生命週期階段追蹤像是 Activity 出現在螢幕(Started 階段),或是使用者完全離開 Activity (Destroyed 階段)的情形。
到底 Activity 的生命週期有什麼作用?
為了回答這個,先想一下,你在使用手機時最重要的事,都會希望當下的應甪程式執行的很好、使用起來非常滑順。
我們在系統資源有限的情形下,使用了許多 Activity、Fragment。為了管理這些 Activity、Fragment,我們需要瞭解它們的狀態(生命週期階段)。
再看到一個例子,你的應用程式有一個投石車正在丟石頭的畫面。這需要使用裝置 CPU 來進行大量物理模擬運算。
這時當你爸打電話給你(有個重要來電),畫面上的這些物理速度、位置,是否有必要繼續運算?你的想法是什麼呢?
答案是,這取決於你這些物理模擬運算的目的為何。
假設,這時你想要暫停投石車正在丟石頭的動畫運作,來接聽這通來電。如果在我講完電話後回到原先應用程式,看到投石車的動畫運作已結束、完成,我可能會覺得困惑。
又假如,我有一個裝置同時管理 20 個有相同動畫運作、開啟中的應用程式。如果這 20 個應用程式都維持原本的動畫運作,固然令人驚豔。但也會造成 CPU 沉重的物理計算。若這 20 個應用程式不在畫面上,卻在背景運作大量的畫面呈現動作,將會拖累整個裝置的運作速度。
Android 作業系統(OS, operating system)不僅關注應用程式是否可見,也會為了節省電量、改善應用程式效率的目的,來關注應用程式的 Activity。Android 作業系統有時(occasionally)會 stop 和 restart 背景的應用程式。
因此,你會希望程式可以主動性(Proactive)、防禦性(Defensive)地完成上面提及的目的。
主動性意謂 Android 作業系統會清出未使用的資源。
防禦性意謂 Android 作業系統會做出 restart 應用程式等操作。
參考資料